package com.info33.platform.system.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.info33.platform.system.entity.SysTenantMenu;
import com.info33.platform.system.vo.SysTenantMenuVO;
import com.info33.platform.system.vo.SysUserVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author admin
 */
@Repository
public interface SysTenantMenuDao extends BaseMapper<SysTenantMenu> {

    /**
     * 租户菜单表 + 菜单用户表 + 用户部门岗位表
     *
     * @param currentUser 当前用户
     * @return 当前用户所有菜单
     */
    List<SysTenantMenuVO> pcMenu(@Param("currentUser") SysUserVO currentUser);

    /**
     * 分页获取菜单列表
     *
     * @param tenantId 租户id
     * @param pid      父id
     * @param page
     * @return
     */
    IPage<SysTenantMenu> pageMenuList(@Param("tenantId") Long tenantId, @Param("pid") Long pid, IPage<SysTenantMenu> page);

    /**
     * 菜单表
     *
     * @param currentUser 当前用户
     * @return 当前用户权限集合
     */
    List<String> menuPermission(@Param("currentUser") SysUserVO currentUser);

    /**
     * 批量添加菜单信息
     *
     * @param menuList
     * @return
     */
    int batchInsert(List<SysTenantMenu> menuList);

    /**
     * 获取所有菜单
     *
     * @param tenantId
     * @return
     */
    List<SysTenantMenuVO> getAllMenu(Long tenantId);

    /**
     * 查询父级菜单
     *
     * @param id
     * @return
     */
    SysTenantMenu selectParentMenu(@Param("id") Long id);

    /**
     * 获取所有下发菜单列表
     *
     * @param tenantId
     * @return
     */
    List<SysTenantMenuVO> getAllIssueMenu(Long tenantId);

    /**
     * 获取当前登录人按钮权限
     *
     * @param action
     * @param currentUser
     * @return
     */
    List<SysTenantMenuVO> getButtonMenuList(@Param("action") String action, @Param("currentUser") SysUserVO currentUser);

    /**
     * 获取菜单树，根据当前用户或顶级菜单
     *
     * @param currentUser 当前用户
     * @return vo
     */
    List<SysTenantMenuVO> listByUser(@Param("currentUser") SysUserVO currentUser);
}